Microsoft SQL Server provides several built-in features to achieve horizontal partitioning of data across multiple databases or servers, which aligns with the sharding paradigm:
Federated Databases (Manual Sharding)
- What it is: Distribute tables across multiple SQL Server instances manually (e.g., CustomerDB_Server1, CustomerDB_Server2).
- How to query: Use linked servers or application logic to route queries.
- Limitations: Complex to manage; no built-in load balancing.
Partitioned Tables (Vertical Scaling)
- What it is: Split a single table into partitions within the same database (e.g., by date ranges).
- Syntax Example:
CREATE PARTITION FUNCTION myRangePF (datetime)
AS RANGE RIGHT FOR VALUES ('2023-01-01', '2024-01-01');
- Limitations: Still runs on a single server; no horizontal scaling.
Elastic Database Tools (Azure SQL Database)
- What it is: A cloud-native solution for sharding in Azure SQL Database.
- Features:
Shard Map Manager: Tracks shards and routes queries.
Elastic Query: Query across shards seamlessly.
Split/Merge: Dynamically resize shards.
- Limitations: Only works in Azure (not on-premises SQL Server).
Distributed Partitioned Views (Legacy)
- What it is: Combine data from multiple tables (on different servers) into a single view.
- Syntax Example:
CREATE VIEW CustomersAll AS
SELECT * FROM Server1.CustomerDB.dbo.Customers
UNION ALL
SELECT * FROM Server2.CustomerDB.dbo.Customers;
- Limitations: Performance overhead; deprecated in favor of Azure Elastic Database tools.